// These are meant to be typed into the REPL. You can also run
// scala -Xnojline < repl-session.scala to run them all at once.
/**
  * 第3章 控制结构和函数
  * Java 中把表达式和语句当成两个不同的东西，表达式有值，语句没有值，
  * 只是控制结构。 在 Scala 中， 几乎所有语法结构都有值。
  * 3.1 If else 表达式
  *
  */
val x = 0

// if else 语句结构
if (x > 0) 1 else -1

/**
  * S 为什么会有值？
  * If 语句的返回类型取决于最后一条语句。 语句后面的分号不是必须的。
  * Scala 没有三元运算符， 不需要。大数据技术之 Scala 程序设计解析
  * 21
  * If 表达式会有一个返回值类型， 如果 if 或者 else 返回的类型不一样， 就
  * 返回 Any 类型（所有类型的公共超类型）。
  */
// 可以有返回值
val s = if (x > 0) 1 else -1

// 类型不一样时，返回公共超类型Any
if (x > 0) "positive" else -1


/**
  * 如果缺少一个判断， 什么都没有返回， 但是 Scala 认为任何表达式都会
  * 有值， 对于空值， 使用 Unit 类， 写做（）【叫做无有用占位符，相当于 java
  * 中的 void】
  */
// 如果没有值，则返回Unit，类似于Java 的Void
if (x > 0) 1

if (x > 0) 1 else ()
/*
注： 行尾的位置不需要分号，只要能够从上下文判断出语句的终止即可。但是如果
在单行中写多个语句，则需要分号分割。在 Scala 中， {}快包含一系列表达
式，其结果也是一个表达式。块中最后一个表达式的值就是块的值。
 */


//  需不需要分号

var n = 10
var r = 1
// 如果多行表达式卸载一行需要分号，单个表达式可以不用大括号
if (n > 0) { r = r * n; n -= 1 }

var s1, s0, v, v0, t, a, a0= 0.0

s1 = s0 + (v - v0) * t + // The + tells the parser that this is not the end
  0.5 * (a - a0) * t * t

// 不需要分号,{}的值就是最后一个表达式的值
if (n > 0) {
  r = r * n
  n -= 1
}